// pages/userInfo/myInfo.js
const app = getApp()
import api from '../../config/api'
import path from '../../config/path'
const { $Message } = require('../../dist/base/index');
const { $Toast } = require('../../dist/base/index');
const bubbleMixin = require('../../utils/page-mixin');

Page({
  ...bubbleMixin,
  data: {
    picLocal: app.globalData.picLocal,
    baseHeadPic: app.globalData.picLocal + "/default/head/head.png",
    user: {},
    isLogin: false
  },

  onLoad() {
    console.log('myInfo页面加载')
    this.checkLoginStatus()
  },

  onReady() {
    if (!this.data.isLogin) {
      $Message({
        content: '请先进行登录',
        type: 'error'
      });
    }
  },

  onShow() {
    console.log('myInfo页面显示')
    this.checkLoginStatus()
  },

  // 检查登录状态方法
  checkLoginStatus() {
    const token = wx.getStorageSync('token')
    const userInfo = wx.getStorageSync('userInfo')
    
    console.log('本地存储的token:', token)
    console.log('本地存储的用户信息:', userInfo)
    
    if (token && userInfo) {
      this.setData({
        isLogin: true,
        user: userInfo
      })
      this.fetchUserInfo()
    } else {
      this.setData({
        isLogin: false,
        user: {}
      })
    }
  },

  handleLogin() {
    wx.navigateTo({
      url: './manageLogin/login',
    })
  },

  // 获取用户信息方法
  fetchUserInfo() {
    console.log('开始获取用户信息')
    api.get('user', path.path.getUserInfo).then(res => {
      console.log('用户信息接口返回:', res)
      if (res.code === 200) {
        const userData = res.data || {}
        // 格式化用户信息，确保字段匹配
        const formattedUser = {
          id: userData.id,
          username: userData.username,
          phone: userData.phone,
          role: userData.role,
          realName: userData.realName,
          avatar: userData.avatar,
          name: userData.realName || userData.username,
          headUrl: userData.avatar,
          sex: userData.sex || '0',
          roleStr: this.getRoleString(userData.role),
          openId: userData.openId || null
        }
        
        console.log('格式化后的用户信息:', formattedUser)
        
        wx.setStorageSync('userInfo', formattedUser)
        this.setData({
          user: formattedUser,
          isLogin: true
        })
      }
    }).catch(err => {
      console.log('fetchUserInfo error', err)
      // 即使获取失败，也保持登录状态，使用本地存储的用户信息
      const localUserInfo = wx.getStorageSync('userInfo')
      if (localUserInfo) {
        this.setData({
          user: localUserInfo,
          isLogin: true
        })
      } else {
        this.setData({ isLogin: false })
      }
    })
  },

  // 角色转换方法
  getRoleString(role) {
    const roleMap = {
      0: '普通用户',
      1: '房东',
      2: '管理员'
    }
    return roleMap[role] || '未知角色'
  },

  // 退出登录方法
  handleLogout() {
    wx.showModal({
      title: '确认退出',
      content: '您确定要退出登录吗？',
      confirmColor: '#d81e06',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '退出中...',
          })
          
          // 清除本地存储
          wx.removeStorageSync('token')
          wx.removeStorageSync('userInfo')
          wx.removeStorageSync('isLogin')
          wx.removeStorageSync('message_subscription_id')
          wx.removeStorageSync('error_subscription_id')
          
          // 关闭WebSocket连接
          if (app.globalData.webSocketManager) {
            app.globalData.webSocketManager.close()
          }
          
          // 重置数据
          this.setData({
            isLogin: false,
            user: {}
          })
          
          setTimeout(() => {
            wx.hideLoading()
            $Toast({
              content: '已退出登录',
              icon: 'success'
            })
          }, 500)
        }
      }
    })
  },

  toChangeInfo() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }
    wx.navigateTo({
      url: './changeMyInfo?id=' + this.data.user.id,
    })
  },

  toCollection() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }
    
    wx.navigateTo({
      url: './collection/collection',
    })
  },

  toMyRent() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }
    
    wx.navigateTo({
      url: './renting/renting',
    })
  },

  toMyHouse() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }
    
    wx.navigateTo({
      url: './myhouse/myhouse',
    })
  },

  rentManage() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }
    
    $Toast({
      content: '该功能暂未开放',
      icon: 'warning_fill'
    })
  },

  // 上传头像方法
  uploadHeadPic() {
    if (!this.data.isLogin) {
      $Toast({
        content: '请先登录',
        icon: 'warning_fill'
      })
      return
    }

    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      maxDuration: 30,
      camera: 'back',
      success: (res) => {
        const tempFilePath = res.tempFiles[0].tempFilePath
        console.log('选择的图片临时路径:', tempFilePath)
        
        wx.showLoading({
          title: '上传中...',
        })
        
        // 上传图片
        api.post('user', path.path.uploadHead, tempFilePath, 'file').then(uploadRes => {
          wx.hideLoading()
          console.log('上传结果:', uploadRes)
          
          if (uploadRes.code === 200) {
            const avatarUrl = uploadRes.data
            // 更新用户头像
            this.updateUserAvatar(avatarUrl)
          } else {
            $Toast({
              content: uploadRes.message || '上传失败',
              type: 'error'
            })
          }
        }).catch(err => {
          wx.hideLoading()
          console.error('上传失败:', err)
          $Toast({
            content: '上传失败，请重试',
            type: 'error'
          })
        })
      },
      fail: (err) => {
        console.log('选择图片失败:', err)
        if (err.errMsg.includes('cancel')) {
          // 用户取消选择，不提示
          return
        }
        $Toast({
          content: '选择图片失败',
          type: 'error'
        })
      }
    })
  },

  // 更新用户头像
  updateUserAvatar(avatarUrl) {
    const userInfo = {
      ...this.data.user,
      avatar: avatarUrl,
      headUrl: avatarUrl
    }
    
    // 更新本地存储
    wx.setStorageSync('userInfo', userInfo)
    
    // 更新页面数据
    this.setData({
      user: userInfo
    })
    
    $Toast({
      content: '头像上传成功',
      icon: 'success'
    })
    
    // 可选：调用更新用户信息的接口，如果需要保存到服务器
    this.updateUserInfoToServer(avatarUrl)
  },

  // 更新用户信息到服务器
  updateUserInfoToServer(avatarUrl) {
    const updateData = {
      avatar: avatarUrl
    }
    
    api.post('user', path.path.updateUser, updateData).then(res => {
      if (res.code === 200) {
        console.log('用户信息更新成功')
      }
    }).catch(err => {
      console.log('更新用户信息失败:', err)
      // 这里不提示用户，因为头像已经上传成功，只是后端信息更新失败
    })
  },

})